One approach to the design and implementation of computer networks, particularly with regard to the development of client/server applications, includes designing client applications and client devices so that the majority of the heavily used resources are at a remote computing device, such as a centralized server, connected via a network. These client devices generally have minimal memory, disk storage, and processor power, but are designed under the premise that most users connected to a powerful server do not need the additional processing power. With these client devices, the total cost of ownership is minimized, because of the reduced resources and because the clients can be centrally administered and updated from the server.
One operational issue faced when deploying a new application in such a client/server configuration is that a significant amount of efforts may be involved to customize the new application for execution on a client device. An application developer may have to re-write the server portion and/or the client portion of the application to ensure satisfactory user experience on client devices having varying graphics and processor capabilities.
In a server-centric system, an application is typically designed to run on the server platform and minimal effort is put into customizing user experience for the application on a client device. In general, a graphical view of the output of the application, as would be seen at a display connected to the server, is provided to the client device. In such a server-centric system, a user of a remote client device can control the application running on the server by using the graphical control objects, such as scroll bar, radio buttons and drop-down lists that would be displayed on the display at the server. However, when the client device has a relatively small display, such a system may not provide satisfactory user experience. For client devices with relatively small displays, such as a mobile phone or a personal digital assistant, these graphical objects as seen on the small display are typically much smaller than the size of a human finger used to manipulate the graphical objects. Even if the client device allows zooming in, the user experience suffers because a user needs to constantly manipulate the display by adjusting zooming and scrolling the display.
In a client-centric system, an application may be written for a client device and ported to the operating system of the client device. Thus, in a client-centric system, a large part of the application may be run on the client device, with some support from the remote server. In practice, a client-centric system also has certain shortcomings. Every time a new device is introduced in the market, the application may have to be ported to the new device. Depending on the details of the software and hardware environment of a new device, this task of porting the application may require significant resources, making such portability impractical. In a typical client-centric system, the client device user interface and features are compiled and built before shipping the client device to a customer. The client graphical user interface (GUI) is static and can be changed by a tedious and user intensive procedure. It is difficult to create a personalized GUI for users. Furthermore, introducing new features, changing application functionality or GUI needs a tedious user-initiated process or new code development.
A better technique for deploying applications in a client/server environment is needed.